package org.uca.dss.curso2011.grupo1.clases;

import java.util.ArrayList;
import java.util.List;
import org.joda.time.LocalDate;


/**
 * Clase InformacionReserva que identifica los asientos reservados de una hora especifica de un trayecto con un medio de transporte, en una fecha.
 * @author Alejandro & David
 */
public class InformacionReserva {
    private Hora hora;
    private String fecha;
    private List<Boolean> asientos;


    /**
     * Constructor de la clase InformacionReserva.
     * @param hora Objeto Hora del que se compone la InformacionReserva.
     * @param fecha Fecha del viaje de la hora que identifica todas las reservas para ese viaje.
     */
    public InformacionReserva(Hora hora, LocalDate fecha){
        this.hora = hora;
        this.fecha=fecha.toString();
        this.asientos = new ArrayList<Boolean>();

        int numAsientos = hora.obtieneMedioTransporte().obtieneNumeroAsientos();

        while(numAsientos > 0){
            this.asientos.add(false);
            numAsientos -= 1;
        }
    }

    
   /**
    * Función que compara si una InformacionReserva es igual a una hora y una fecha dada.
    * @param hora Objeto Hora que contiene la hora del viaje con el trayecto y el medio de transporte.
    * @param fecha Objeto que contiene la fecha del viaje.
    * @return Devuelve true si es igual o False en caso contrario.
    */
    public boolean comparaInformacionReserva(Hora hora, LocalDate fecha){
        return this.hora.comparaHora(hora) && this.fecha.equals(fecha.toString());
    }
    /**
     * Función que calcula el número de asientos libres de un viaje en una fecha.
     * @return Devuelve el número de asientos libres.
     */
    public int numeroAsientosLibres(){
        int numAsiento = 0;
        for(Boolean asiento : this.asientos){
            if(asiento.equals(false)){
                numAsiento += 1;
            }
        }
        return numAsiento;

    }

    /**
     * Método que devuelve los asientos.
     * @return asientos
     */
    public List<Boolean> obtieneAsientos() {
        return this.asientos;
    }



}
